import 'package:flutter/material.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/util.dart';
import 'package:stackwallet/widgets/desktop/desktop_dialog.dart';
import 'package:stackwallet/widgets/desktop/desktop_dialog_close_button.dart';
import 'package:stackwallet/widgets/stack_dialog.dart';

class BasicDialog extends StatelessWidget {
  const BasicDialog({
    Key? key,
    this.leftButton,
    this.rightButton,
    this.icon,
    required this.title,
    this.message,
    this.desktopHeight = 474,
    this.desktopWidth = 641,
    this.canPopWithBackButton = false,
  }) : super(key: key);

  final Widget? leftButton;
  final Widget? rightButton;

  final Widget? icon;

  final String title;
  final String? message;

  final double? desktopHeight;
  final double desktopWidth;

  final bool canPopWithBackButton;

  @override
  Widget build(BuildContext context) {
    final isDesktop = Util.isDesktop;

    if (isDesktop) {
      return DesktopDialog(
        maxHeight: desktopHeight,
        maxWidth: desktopWidth,
        child: Column(
          children: [
            Padding(
              padding: const EdgeInsets.only(left: 32),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Text(
                    title,
                    style: STextStyles.desktopH3(context),
                  ),
                  const DesktopDialogCloseButton(),
                ],
              ),
            ),
            if (message != null)
              Padding(
                padding: const EdgeInsets.symmetric(horizontal: 32),
                child: Text(
                  message!,
                  style: STextStyles.desktopTextSmall(context),
                ),
              ),
            if (leftButton != null || rightButton != null)
              const SizedBox(
                height: 32,
              ),
            if (leftButton != null || rightButton != null)
              Padding(
                padding: const EdgeInsets.all(32),
                child: Row(
                  children: [
                    leftButton != null
                        ? Expanded(child: leftButton!)
                        : const Spacer(),
                    const SizedBox(
                      width: 16,
                    ),
                    rightButton != null
                        ? Expanded(child: rightButton!)
                        : const Spacer(),
                  ],
                ),
              )
          ],
        ),
      );
    } else {
      return WillPopScope(
        onWillPop: () async {
          return canPopWithBackButton;
        },
        child: StackDialog(
          title: title,
          leftButton: leftButton,
          rightButton: rightButton,
          icon: icon,
          message: message,
        ),
      );
    }
  }
}
